/**
 * 设备预约相关接口网络模块
 */

import axios from "./axios.config";
import util from "./util";

class DeviceBookingApi {
  /**
   * 创建设备预约
   * @param {Object} bookingData 预约数据
   * @returns {Promise} 预约结果
   */
  async createBooking(bookingData) {
    let result = await axios.post('/deuse/borrows', bookingData);
    return util.jsonTransfer(result.data);
  }

  /**
   * 获取设备预约列表
   * @param {number} deviceId 设备ID
   * @returns {Promise} 预约列表
   */
  async getBookings(deviceId) {
    let result = await axios.get(`/deuse/borrows?deviceId=${deviceId}`);
    return util.jsonTransfer(result.data);
  }

  /**
   * 获取用户预约列表
   * @returns {Promise} 用户预约列表
   */
  async getUserBookings() {
    let result = await axios.get('/deuse/borrows');
    return util.jsonTransfer(result.data);
  }

  /**
   * 取消预约
   * @param {number} bookingId 预约ID
   * @returns {Promise} 取消结果
   */
  async cancelBooking(bookingId) {
    let result = await axios.post('/deuse/borrows/cancel', { bookingId });
    return util.jsonTransfer(result.data);
  }

  /**
   * 获取预约记录列表
   * @param {Object} params 查询参数
   * @returns {Promise} 预约记录列表
   */
  async getBookingRecords(params = {}) {
    try {
      const queryString = new URLSearchParams(params).toString()
      const response = await axios.get(`/deuse/borrows?${queryString}`)
      return response.data
    } catch (error) {
      console.error('获取预约记录失败:', error)
      throw error
    }
  }

  /**
   * 更新预约状态
   * @param {Object} data 更新数据
   * @returns {Promise} 更新结果
   */
  async updateBookingStatus(data) {
    try {
      const response = await axios.put('/deuse/borrows/status', data)
      return util.jsonTransfer(response.data)
    } catch (error) {
      console.error('更新预约状态失败:', error)
      throw error
    }
  }

  /**
   * 归还设备
   * @param {Object} data 归还数据
   * @returns {Promise} 归还结果
   */
  async returnDevice(data) {
    try {
      const response = await axios.post('/deuse/borrows/return', data);
      return util.jsonTransfer(response.data);
    } catch (error) {
      console.error('归还设备失败:', error);
      throw error;
    }
  }

  /**
   * 获取设备使用记录
   * @param {number} deviceId 设备ID
   * @param {number} limit 限制数量
   * @param {number} offset 偏移量
   * @returns {Promise} 使用记录列表
   */
  async getUsageRecords(deviceId, limit = -1, offset = -1) {
    try {
      const response = await axios.get(`/deuse/device/${deviceId}/usage-records`, {
        params: { limit, offset }
      });
      return util.jsonTransfer(response.data);
    } catch (error) {
      console.error('获取使用记录失败:', error);
      throw error;
    }
  }

  /**
   * 获取超期未归还的设备列表
   * @returns {Promise<Object>} 超期设备列表
   */
  async getOverdueDevices() {
    try {
      const response = await axios.get('/deuse/borrows/overdue');
      return response.data;
    } catch (error) {
      console.error('获取超期设备失败:', error);
      throw error;
    }
  }

  /**
   * 添加设备使用记录
   * @param {number} deviceId 设备ID
   * @param {string} usageNote 使用说明
   * @returns {Promise} 添加结果
   */
  async addUsageRecord(deviceId, usageNote) {
    try {
      const response = await axios.post(`/deuse/device/${deviceId}/usage-records`, {
        usageNote
      });
      return util.jsonTransfer(response.data);
    } catch (error) {
      console.error('添加使用记录失败:', error);
      throw error;
    }
  }
}

export default DeviceBookingApi; 